In [2]:
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

数据导入

In [3]:
train = pd.read_csv('../data/atec_anti_fraud_train.csv')
In [9]:
test = pd.read_csv('../data/atec_anti_fraud_test_a.csv')

正负样本比

In [17]:
sns.countplot(data=train,x='label')
plt.show()
print train.groupby('label').count()['id']
label
-1      4725
 0    977884
 1     12122
Name: id, dtype: int64

分成 离散型特征与数值特征

In [22]:
num_col =[]
cat_col = []
In [23]:
cols = [c for c in train.columns if 'f' in c]
In [25]:
for col in cols:
    if train[col].dtype =='int64':
        cat_col.append(col)
    if train[col].dtype =='float64':
        num_col.append(col)

观察连续特征在 0,1,-1,整体 下的KDE

In [63]:
for col in num_col:
    fig,ax =plt.subplots(2,2,figsize=(10,10))
    sns.kdeplot(train[col][train['label']==0],color='r',ax=ax[0][0])
    sns.kdeplot(train[col][train['label']==1],color='b',ax=ax[0][1])
    sns.kdeplot(train[col][train['label']==-1],color='g',ax=ax[1][0])
    sns.kdeplot(train[col],color='y',ax=ax[1][1])
    plt.show()

观察连续特征在 0,1,-1,整体 下的hist

In [68]:
for col in num_col:
    fig,ax =plt.subplots(2,2,figsize=(10,10))
    train[col][train['label']==0].hist(color='r',ax=ax[0][0])
    train[col][train['label']==1].hist(color='b',ax=ax[0][1])
    train[col][train['label']==-1].hist(color='g',ax=ax[1][0])
    train[col].hist(color='y',ax=ax[1][1])
    plt.show()

变量间的相关性

In [71]:
corr =train[num_col+cat_col].corr()
In [78]:
plt.figure(figsize=(30,30))
sns.heatmap(data=corr)
plt.show()

离散特征在不同标签下的分布

In [91]:
for col in cat_col:
    fig,ax=plt.subplots(2,1)
    sns.countplot(data=train[train['label']==-1],x=col,ax=ax[0])
    sns.countplot(data=train[train['label']==0],x=col,ax=ax[1])
    plt.show()

提取月份

In [95]:
train['month']=train.date.map(lambda x: str(x)[0:6])
In [98]:
train.groupby('month')['label'].mean()
Out[98]:
month
201709    0.006752
201710    0.007756
201711    0.008938
Name: label, dtype: float64

统计训练集中每天的正负比

In [126]:
train['date_str'] = train.date.map(lambda x: str(x))
plt.figure(figsize=(15,8))
train.groupby('date_str')['label'].mean().plot(kind='bar')
plt.show()

统计训练集中每天样本数

In [127]:
train['date_str'] = train.date.map(lambda x: str(x))
plt.figure(figsize=(15,8))
train.groupby('date_str')['label'].count().plot(kind='bar')
plt.show()

统计训练集中 label ==1 每天的样本数

In [128]:
train['date_str'] = train.date.map(lambda x: str(x))
plt.figure(figsize=(15,8))
train[train.label==1].groupby('date_str')['label'].count().plot(kind='bar')
plt.show()

统计训练集中 label ==0 每天的样本数

In [129]:
train['date_str'] = train.date.map(lambda x: str(x))
plt.figure(figsize=(15,8))
train[train.label==0].groupby('date_str')['label'].count().plot(kind='bar')
plt.show()

统计训练集中 label ==-1 每天的样本数

In [130]:
train['date_str'] = train.date.map(lambda x: str(x))
plt.figure(figsize=(15,8))
train[train.label==-1].groupby('date_str')['label'].count().plot(kind='bar')
plt.show()

连续特征 train 与test 中的分布比较

In [132]:
for col in num_col:
    fig,ax =plt.subplots(1,2,figsize=(10,10))
    sns.kdeplot(train[col],color='r',ax=ax[0])
    sns.kdeplot(test[col],color='b',ax=ax[1])
    plt.show()

离散特征train 与 test 分布比较

In [133]:
for col in cat_col:
    fig,ax=plt.subplots(2,1)
    sns.countplot(data=train,x=col,ax=ax[0])
    sns.countplot(data=test,x=col,ax=ax[1])
    plt.show()